nullOk パラメータの削除
まとめ
この移行ガイドでは、nullOk
複数のパラメータof
使用する静的アクセサーと関連アクセサー
null 許容の戻り値を持つ代替 API。
コンテクスト
Flutter には、いくつかのタイプのウィジェットのルックアップを可能にする共通のパターンがあります。
(InheritedWidget
s) 通常呼び出される静的メンバー関数を使用するof
、そして、BuildContext
。
null 非許容がデフォルトになる前は、これらを切り替えることができて便利でした。 ウィジェットが存在しない場合に例外のスローを切り替える API ウィジェット ツリーが見つからない場合は null を返します。役に立ちましたし、 すべての変数は null 値を許容できるため、混乱することはありませんでした。
null 非許容性がデフォルトになったときは、
最も一般的に使用される API は、NULL 非許容値を返します。こう言うからですMediaQuery.of(context, nullOk: false)
そしてまだ必要です!
オペレーター
また?
そして、その呼び出し後のフォールバック値は扱いにくいと感じました。
のnullOk
パラメーターは null 安全性切り替えを提供する安価な形式でした。
null 非許容性に対する真の言語サポートに直面して、当時は
開発者に対して冗長で、おそらく矛盾する信号を送信します。
これを解決するには、of
アクセサー (および同様に使用されるいくつかの関連アクセサー)nullOk
) は 2 つの呼び出しに分割されました。1 つは null 非許容値を返し、もう 1 つは null 非許容値を返します。
必要なウィジェットが存在しない場合に例外をスローしました。
例外をスローしなかった null 許容値を返し、次の場合は null を返しました。
ウィジェットは存在しませんでした。
この変更の設計ドキュメントは次のとおりです。nullOk パラメータの削除。
変更内容の説明
実際の変更では、これらの API が変更され、nullOk
パラメータ、および
null 非許容値を返します。
MediaQuery.of
Navigator.of
ScaffoldMessenger.of
Scaffold.of
Router.of
Localizations.localeOf
FocusTraversalOrder.of
FocusTraversalGroup.of
Focus.of
Shortcuts.of
Actions.handler
Actions.find
Actions.invoke
AnimatedList.of
SliverAnimatedList.of
CupertinoDynamicColor.resolve
CupertinoDynamicColor.resolveFrom
CupertinoUserInterfaceLevel.of
CupertinoTheme.brightnessOf
CupertinoThemeData.resolveFrom
NoDefaultCupertinoThemeData.resolveFrom
CupertinoTextThemeData.resolveFrom
MaterialBasedCupertinoThemeData.resolveFrom
そして、これらの新しい API をそれらと並行して導入しました。 null 許容値を返します。
MediaQuery.maybeOf
Navigator.maybeOf
ScaffoldMessenger.maybeOf
Scaffold.maybeOf
Router.maybeOf
Localizations.maybeLocaleOf
FocusTraversalOrder.maybeOf
FocusTraversalGroup.maybeOf
Focus.maybeOf
Shortcuts.maybeOf
Actions.maybeFind
Actions.maybeInvoke
AnimatedList.maybeOf
SliverAnimatedList.maybeOf
CupertinoDynamicColor.maybeResolve
CupertinoUserInterfaceLevel.maybeOf
CupertinoTheme.maybeBrightnessOf
移行ガイド
新しい形式の API を使用するようにコードを変更するには、すべての API を変換します。
以下を含む呼び出しのインスタンスnullOk = true
を使用するパラメータとしてmaybe
代わりに API の形式を使用します。
したがって、この:
MediaQueryData? data = MediaQuery.of(context, nullOk: true);
は次のようになります:
MediaQueryData? data = MediaQuery.maybeOf(context);
また、API を呼び出すすべてのインスタンスを次のように変更する必要があります。nullOk =
false
(多くの場合デフォルト)、null 非許容の戻り値を受け入れるか、任意の戻り値を削除します。!
演算子:
したがって、次のいずれかになります。
MediaQueryData data = MediaQuery.of(context)!; // nullOk false by default.
MediaQueryData? data = MediaQuery.of(context); // nullOk false by default.
どちらも次のようになります。
MediaQueryData data = MediaQuery.of(context); // No ! or ? operator here now.
のunnecessary_non_null_assertion
分析オプションは、次のような場合に非常に役立ちます。
場所を見つける!
演算子を削除する必要があります。unnecessary_nullable_for_final_variable_declarations
分析オプションは次のとおりです
不要な疑問符演算子を見つけるのに役立ちますfinal
とconst
変数。
タイムライン
リリースされたバージョン: 1.24.0
安定版リリース: 2.0.0
参考文献
API ドキュメント:
MediaQuery.of
Navigator.of
ScaffoldMessenger.of
Scaffold.of
Router.of
Localizations.localeOf
FocusTraversalOrder.of
FocusTraversalGroup.of
Focus.of
Shortcuts.of
Actions.handler
Actions.find
Actions.invoke
AnimatedList.of
SliverAnimatedList.of
CupertinoDynamicColor.resolve
CupertinoDynamicColor.resolveFrom
CupertinoUserInterfaceLevel.of
CupertinoTheme.brightnessOf
CupertinoThemeData.resolveFrom
NoDefaultCupertinoThemeData.resolveFrom
CupertinoTextThemeData.resolveFrom
MaterialBasedCupertinoThemeData.resolveFrom
MediaQuery.maybeOf
Navigator.maybeOf
ScaffoldMessenger.maybeOf
Scaffold.maybeOf
Router.maybeOf
Localizations.maybeLocaleOf
FocusTraversalOrder.maybeOf
FocusTraversalGroup.maybeOf
Focus.maybeOf
Shortcuts.maybeOf
Actions.maybeFind
Actions.maybeInvoke
AnimatedList.maybeOf
SliverAnimatedList.maybeOf
CupertinoDynamicColor.maybeResolve
CupertinoUserInterfaceLevel.maybeOf
CupertinoTheme.maybeBrightnessOf
関連する問題:
- 問題 68637
関連する PR:
- 削除
nullOk
のMediaQuery.of
- 削除
nullOk
のNavigator.of
- 削除
nullOk
からのパラメータAnimatedList.of
とSliverAnimatedList.of
- 削除
nullOk
からのパラメータShortcuts.of
、Actions.find
、 とActions.handler
- 削除
nullOk
からのパラメータFocus.of
、FocusTraversalOrder.of
、 とFocusTraversalGroup.of
- 削除
nullOk
からのパラメータLocalizations.localeOf
- 削除
nullOk
からのパラメータRouter.of
- 削除
nullOk
からScaffold.of
とScaffoldMessenger.of
- 削除
nullOk
クパチーノ色解像度 API のパラメータ - 痕跡を除去する
nullOk
からのパラメータLocalizations.localeOf
- 削除
nullOk
からActions.invoke
、 追加Actions.maybeInvoke